PassThrough
この属性は、TimesTenのCache Connectコンポーネントとともに使用します。
この属性では、TimesTenデータ・ストアにおいてのみ実行されるSQL文、およびOracleデータベースに渡されるSQL文を指定します。TimesTenの機能であるCache Connectの詳細は、『Oracle TimesTen Cache Connect to Oracle開発者および管理者ガイド』およびこのマニュアルの「CREATE CACHE GROUP」を参照してください。
準備されたPassThroughコマンドを実行する場合、Oracleの依存オブジェクトのスキーマが準備後に変更されていないと想定しています。スキーマによってPassThroughコマンドが変更されている場合は、Oracleで予期せぬ結果が発生する可能性があります。
設定
PassThroughは次のように設定します。
CまたはJavaプログラム 、あるいはUNIX ODBC.INIファイル | PassThrough | 0: SQL文はTimesTenに対してのみ実行されます。 1: INSERT、DELETE、UPDATEおよびDDL以外の文がTimesTenで構文エラーを生成する場合、またはこれらの文で参照されている1つ以上の表がTimesTenに存在しない場合、INSERT、DELETE、UPDATEおよびDDL以外の文が渡されます。対象の表がTimesTenで見つからない場合、すべてのINSERT、DELETEおよびUPDATE文が渡されます。DDL文は渡されません。 2: 1と同じ動作に加え、READONLYのキャッシュ・グループ表に対して実行されたすべてのINSERT、UPDATEおよびDELETE文が渡されます。 3: COMMIT、ROLLBACK、SAVEPOINT以外のすべてのSQL文と、オプティマイザ・フラグを設定または取得するTimesTen組込みプロシージャが渡されます。 |
Windows ODBCデータソース・アドミニストレータ | 「PassThrough」リスト | 0: SQL文はTimesTenに対してのみ実行されます。 1: INSERT、DELETE、UPDATEおよびDDL以外の文がTimesTenで構文エラーを生成する場合、またはこれらの文で参照されている1つ以上の表がTimesTenに存在しない場合、INSERT、DELETE、UPDATEおよびDDL以外の文が渡されます。対象の表がTimesTenで見つからない場合、すべてのINSERT、DELETEおよびUPDATE文が渡されます。DDL文は渡されません。 2: 1と同じ動作に加え、READONLYのキャッシュ・グループ表に対して実行されたすべてのINSERT、UPDATEおよびDELETE文が渡されます。 3: COMMIT、ROLLBACK、SAVEPOINT以外のすべてのSQL文と、オプティマイザ・フラグを設定または取得するTimesTen組込みプロシージャが渡されます。 |
PassThrough機能を使用する場合、いくつかの制限を考慮する必要があります。次の制限があります。
- TimesTen独自の構文を使用するSQL文がOracleデータベースに渡される場合、TimesTenはその構文がOracleでサポートされていないことを示すエラー・メッセージを返します。
- 準備されたPassThroughコマンドを実行する場合、Oracleの依存オブジェクトのスキーマが準備後に変更されていないと想定しています。このため、Oracleから予想外の結果が発生したり、TimesTenシステムがクラッシュしたりすることがあります。
- TimesTenはキャッシュを無効にする機能を備えていません。TimesTenはキャッシュされた表が最新の状態であるかを検証しません。TimesTenで問合せの構文が正しく、問合せで参照されるすべての表がキャッシュに存在する場合、キャッシュが最新であるかどうかにかかわらず問合せはTimesTenで実行されます。
- OracleのINSERT、UPDATEおよびDELETE処理の受渡しは、前述の表に示すPassThrough属性の設定に依存します。TimesTen Cache Connectは、トリガーやストアド・プロシージャの中に隠されたINSERT、UPDATEおよびDELETE処理を検出できません。このため、TimesTenは隠された処理に対してPassthroughルールを適用できません。
READONLYキャッシュ・グループでのPassThroughのINSERT、UPDATEおよびDELETE処理の結果は、トランザクションがコミットされた後、および次のAUTOREFRESHが完了した後にのみ反映されます。
- TimesTenのSYNCHRONOUS WRITETHROUGHキャッシュ・グループでキャッシュされるOracle表に対する更新を検出またはブロックするメカニズムはありません。更新がキャッシュ経由で渡された文によって実行されたものであるか、その他のキャッシュされていないOracleアプリケーションからのものであるかにかかわらず、変更内容はTimesTenには反映されません。
- TimesTenとOracleで異なるリリースのJDBC、ODBCまたはその他のAPIをサポートしている場合、これらのインタフェースのサポートはTimesTenによってサポートされるリリースに限定されます。
- Oracle OCIでは入力パラメータのバインド型を表すメカニズムがサポートされていません。このリリースでは、すべての入力パラメータは内部的にvarchar(4000)として扱われます。これはOracle ODBCドライバのSQLDescribeParamの動作と一貫性があります。このため、入力パラメータのデータ型にかかわらず、バインド値はOracleに送られる前に常にVARCHARに変換されます。サポートされるデータ型には次の制限があります。
- LONG型の入力バインド値の長さは4000に制限されます。
- OracleのRAW型およびLONG RAW型の入力バインドは、このリリースではサポートされません。
- 日付と時間のリテラル書式は、TimesTenの書式である必要があります。特に、DATEの書式はyyyy-mm-dd hh24:mi:ss、Timestampの書式はyyyy-mm-dd hh24:mi:ss.ffとする必要があります。OracleのNLS_DATE_FORMTATおよびNLS_TIMESTAMP_FORMAT環境変数の設定は無視されます。
- PassThroughコマンドの準備後にOracleのスキーマが変更された場合、このコマンドを実行すると、アプリケーションは予期しない結果を受け取ることがあります。
次の図および表に、PassThrough属性の影響を示します。
文の種類
|
PassThrough属性の設定
|
|
0
|
1
|
2
|
3
|
TimesTenの構文を使用し、TimesTen表のみを参照する問合せまたはプロシージャ・コール。 | TimesTenで実行される。 | TimesTenで実行される。 | TimesTenで実行される。 | Oracleにパススルーされる。 |
TimesTen以外の構文を使用する、またはTimesTenにない表を参照する問合せまたはプロシージャ・コール。 | TimesTenで実行され、エラーを返す。 | Oracleにパススルーされる。 | Oracleにパススルーされる。 | Oracleにパススルーされる。 |
対象の表がTimesTenに存在しない場合のINSERT、DELETEまたはUPDATE文。 | TimesTenで実行され、エラーを返す。 | Oracleにパススルーされる。 | Oracleにパススルーされる。 | Oracleにパススルーされる。 |
対象の表がTimesTenに存在する場合のINSERT、DELETEまたはUPDATE文。 | TimesTenで実行される。 | TimesTenで実行される。 | TimesTenで実行される。 | Oracleにパススルーされる。 |
対象の表がTimesTenのREADONLYキャッシュ・グループに存在する場合のINSERT、DELETEまたはUPDATE文。 | TimesTenで実行され、エラーを返す。 | TimesTenで実行され、エラーを返す。 | Oracleにパススルーされる。 | Oracleにパススルーされる。 |
すべてのDDL文。 | TimesTenで実行される。 | TimesTenで実行される。 | TimesTenで実行される。 | Oracleにパススルーされる。 |